import os
import pprint
import sys
import subprocess
env = os.environ.get("PATH")
s1=r"E:\Program Files\HALCON-24.11-Progress-Steady\bin\x64-win64"

# 定义环境变量
os.environ["PATH"] =env+";"+ s1
pprint.pprint(os.environ.get("PATH"))


import os
import halcon as ha
import cv2
from halcon.numpy_interop import himage_as_numpy_array,himage_from_numpy_array




def setup_hdev_engine():
    """
    设置 HDevEngine，通常包括指定过程（Procedure/Function）的搜索路径。
    Returns:
        str: Halcon 示例程序的 HDevelop 目录路径。
    """
    example_dir = ha.get_system_s('example_dir')
    hdev_example_dir = os.path.join(example_dir, 'hdevengine')

    engine = ha.HDevEngine()
    engine.set_procedure_path(os.path.join(hdev_example_dir, 'procedures'))

    return hdev_example_dir





if __name__ == '__main__':
    # 设置 HDevEngine 的搜索路径
    hdev_example_dir = setup_hdev_engine()
    
    # 加载 HDevelop 程序文件。
    program = ha.HDevProgram(r"fin_detection.hdev")
    
    # 从加载的程序中获取名为 'detect_fin' 的过程（Procedure）或函数（Function）。
    proc = ha.HDevProcedure.load_local(program, 'procedure')
    # 创建该过程的调用实例。
    proc_call = ha.HDevProcedureCall(proc)

    cv_image = cv2.imread("test.jpg")
    # OpenCV默认是BGR顺序，Halcon通常期望RGB顺序，所以需要转换。
    print("Color image detected, converting from BGR to RGB.")
    cv_image_3_channel = cv2.cvtColor(cv_image, cv2.COLOR_BGR2RGB)
    # 将 NumPy 数组转换为 Halcon HImage 对象
    acq_img = himage_from_numpy_array(cv_image_3_channel)

    # 将采集到的图像作为输入参数 'Image' 传递给 'detect_fin' 过程。
    proc_call.set_input_iconic_param_by_name('Image', acq_img)
    proc_call.execute()

    #获取输出的图形参数 (Iconic Parameters),数据类型： 代表图像（HImage）、区域（HRegion）和 XLD（HXLD，例如轮廓、多边形）等图形数据。
    fin_region = proc_call.get_output_iconic_param_by_name('FinRegion')
    
    #获取输出的控制参数 (Control Parameters),数据类型： 代表非图形数据，例如：
    fin_area = proc_call.get_output_control_param_by_name('FinArea')
    
    print(fin_region)
    print("获取到的鳍面积:",fin_area)
